オンラインでも変更可能なT2 Unlimitedを試してみて気付いた注意点 #reinvent
西澤です。
re:Invent 2017で発表された素晴らしいアップデートであるT2 Unlimited。丁寧なブログも公開されていますが、私自身少し触ってみて気付いたことがあったのでまとめてご紹介してみようと思います。概要等については、まず速報ブログをご覧ください。
T2インスタンスの課題
T2インスタンスは一時的な高負荷にもバースト可能な環境をリーズナブルに利用できるというところが、最大の魅力です。ところが、このバーストが曲者で、予期せぬ負荷がかかるようなシステムで利用している場合に、一気に性能がベースラインにまでおちこむという問題がありました。この状態に陥ると、対処をしようにもシステムがまともに応答しないということにより、結果復旧が遅れ、被害が拡大してしまうようなケースもあった為、特に本番環境でのご利用については、十分に特性をご理解をいただいた上でご利用いただくようご案内していました。
T2 Unlimitedの使いどころ
そこで、今回登場したT2 Unlimitedを有効にするという選択肢が新たに取れるようになりました。T2 Unlimitedを有効にすると、通常消費されるCPUCreditBalance
に加えて、実質的に1日分のCPUSurplusCreditBalance
が前借りして利用できるようになり、さらにそれを超過する負荷が発生した場合には、Linuxなら、$0.05 per vCPU-Hour、Windowsなら、$0.096 per vCPU-Hourの追加料金を支払うことで、バーストを継続できるようになりました。ただし、お金をいくらでもかけられるユーザであれば、T2ではなく他のインスタンスタイプを使っているはずですから、恒常的に有効化する場合には、CPUSurplusCreditsCharged
がカウントされた時には通知するようなアラーム設定も忘れずにセットで設定するようにしましょう。
T2 Unlimitedを困ったときにだけ使いたい
実は個人的には、今回試したかったモチベーションはこちらでした。T2 Unlimitedはオンラインで変更できるらしいとのこと!これは困った時にだけ使えば良いやつなのでは?と思い、早速試してみました。
GUIで変更する場合、速報ブログにもある通り、日本語コンソールだと CPU使用率の変更 というやや直感的ではない?と思われるメニューな為、少し注意が必要です(英語コンソールならそのまま、 Change T2 Unlimited なのでこちらの方がわかりやすいかもしれません)。
今回はAWS CLIを使ってオンラインでの変更を試しました。実質コマンド1行ですので、拍子抜けするほど簡単です。
$ aws --version aws-cli/1.14.2 Python/2.7.10 Darwin/16.7.0 botocore/1.8.6 $ aws ec2 describe-instance-credit-specifications --instance-id ${IID} { "InstanceCreditSpecifications": [ { "InstanceId": "i-12345678901234567", "CpuCredits": "standard" } ] } $ aws ec2 modify-instance-credit-specification \ --instance-credit-specification "[{\"InstanceId\": \"${IID}\",\"CpuCredits\": \"unlimited\"}]" { "SuccessfulInstanceCreditSpecifications": [ { "InstanceId": "i-12345678901234567" } ], "UnsuccessfulInstanceCreditSpecifications": [] } $ aws ec2 describe-instance-credit-specifications --instance-id ${IID} { "InstanceCreditSpecifications": [ { "InstanceId": "i-12345678901234567", "CpuCredits": "unlimited" } ] }
- modify-instance-attribute — AWS CLI 1.14.2 Command Reference
- describe-instance-credit-specifications — AWS CLI 1.14.2 Command Reference
それでは、変更後のvmstatの様子を御覧ください。事前準備として、EC2ではCPUをぶん回しておいて、CPUCreditが空の状態にしていたのですが、modify-instance-credit-specification
を実行してから1分程度で、stealが綺麗になくなることが確認できました。
[2017/12/01 12:28:40] 11 1 0 290668 13212 128620 0 0 0 0 33 60 5 0 0 0 95 [2017/12/01 12:28:41] 11 1 0 290668 13212 128620 0 0 0 0 29 48 5 0 0 0 95 [2017/12/01 12:28:42] 11 1 0 290668 13220 128620 0 0 0 16 31 49 6 0 0 0 94 [2017/12/01 12:28:44] 11 1 0 290668 13220 128620 0 0 0 0 34 57 5 0 0 0 95 [2017/12/01 12:28:45] 12 1 0 290668 13220 128620 0 0 0 0 29 48 5 0 0 0 95 [2017/12/01 12:28:46] procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- [2017/12/01 12:28:46] r b swpd free buff cache si so bi bo in cs us sy id wa st [2017/12/01 12:28:46] 12 1 0 290668 13220 128620 0 0 0 12 211 244 79 0 0 0 21 [2017/12/01 12:28:47] 11 1 0 290668 13220 128620 0 0 0 0 259 314 98 1 0 0 1 [2017/12/01 12:28:48] 11 1 0 290668 13220 128620 0 0 0 0 252 280 96 1 0 0 3 [2017/12/01 12:28:49] 11 1 0 290668 13228 128620 0 0 0 12 256 291 98 1 0 0 1 [2017/12/01 12:28:50] 11 1 0 290668 13228 128620 0 0 0 0 257 290 98 0 0 0 2
これはすごく便利ですね!T2インスタンスを本番運用で利用されている方は、どうしても困ったときにだけ手動でT2 Unlimitedに切り替えるという選択肢も用意しておくと良いのではないかと思いました。ちなみに、T2 Standardに戻すのも同じくらい簡単なのですが、ちょっと注意が必要です。
T2 Unlimitedを辞める時の注意点
CPUの負荷が収まった後の流れを抑えておく必要があります。T2 Unlimitedを使って1日分の前借りクレジットであるCPUSurplusCreditBalance
を消費した場合、こちらがまず回復し、こちらが0になった後、CPUCreditBalance
が回復するという順序になります。ここで注意なのですが、1日分の前借りクレジットであるCPUSurplusCreditBalance
はあくまで前借りなので、すべて返済が終わらないと追加請求の対象となるという点です。公式ブログにも記載があるのですが、
残りの CPUSurplusCreditBalance の請求は、インスタンス終了時またはT2 Standardとして構成された時に処理されます。
新しいT2 Unlimited – バーストを超え、高い性能を発揮 | Amazon Web Services ブログ
ということで、TerminateまたはT2 Standardへの変更のタイミングで、前借りであったCPUSurplusCreditBalance
は追加請求であるCPUSurplusCreditsCharged
にそのまま変更されるのです。
こちらは下のグラフを見ていただくのがわかりやすいと思います。
- 前借りクレジットが上限に達する
- 追加請求がカウントされ始める
- 前借りの返済が終わる前にT2 Standardに変更
- 前借りも請求確定
ということで、どうすれば良いのかということですが、T2 Unlimitedに一時的に変更した後、急場を凌いだら、少し様子を見てシステムが安定し、前借り返済をできるだけ済ませてからT2 Standardに戻した方がお得ということになります。T2 Unlimitedを有効にすること自体は課金対象になるわけではありませんので、急いで元に戻すと逆に損をする可能性があると覚えておきましょう。
まとめ
何はともあれ、空きリソースを漏れなく使ってもらいたいというAWSのサービス精神が溢れた素晴らしいアップデートだと思います。これでT2インスタンスの使いみちも大いに広がりますね。
どこかの誰かのお役に立てば嬉しいです。